From 3f7f212940a636800180f76fa926020d39f75eee Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 12 Jun 2007 02:12:32 +0000 Subject: [PATCH] Fix some locking issues svn path=/trunk/; revision=18105 --- ChangeLog | 6 ++++ .../printbackends/cups/gtkprintbackendcups.c | 31 ++++++++++++------- .../printbackends/file/gtkprintbackendfile.c | 4 +++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index da82447b1c..459eeb1ee2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-06-11 Matthias Clasen + + * modules/printbackends/cups/gtkprintbackendfile.c: + * modules/printbackends/cups/gtkprintbackendcups.c: Fix some + locking issues. (#420249, Christian Persch) + 2007-06-11 Matthias Clasen * configure.in: When debugging is turned on, use error-checking diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c index f4108f56ec..f89a0b460e 100644 --- a/modules/printbackends/cups/gtkprintbackendcups.c +++ b/modules/printbackends/cups/gtkprintbackendcups.c @@ -341,6 +341,8 @@ cups_print_cb (GtkPrintBackendCups *print_backend, GError *error = NULL; CupsPrintStreamData *ps = user_data; + GDK_THREADS_ENTER (); + GTK_NOTE (PRINTING, g_print ("CUPS Backend: %s\n", G_STRFUNC)); @@ -375,7 +377,8 @@ cups_print_cb (GtkPrintBackendCups *print_backend, if (error) g_error_free (error); - + + GDK_THREADS_LEAVE (); } static void @@ -818,10 +821,12 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend, int state; gboolean done; + GDK_THREADS_ENTER (); + if (data->job == NULL) { cups_job_poll_data_free (data); - return; + goto done; } data->counter++; @@ -880,6 +885,9 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend, } else cups_job_poll_data_free (data); + +done: + GDK_THREADS_LEAVE (); } static void @@ -968,6 +976,8 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, gboolean list_has_changed; GList *removed_printer_checklist; + GDK_THREADS_ENTER (); + list_has_changed = FALSE; GTK_NOTE (PRINTING, @@ -1182,6 +1192,8 @@ done: g_signal_emit_by_name (backend, "printer-list-changed"); gtk_print_backend_set_list_done (backend); + + GDK_THREADS_LEAVE (); } static gboolean @@ -1204,10 +1216,6 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend) !cups_backend->got_default_printer) return TRUE; - g_object_ref (cups_backend); - - GDK_THREADS_LEAVE (); - cups_backend->list_printers_pending = TRUE; request = gtk_cups_request_new (NULL, @@ -1227,10 +1235,6 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend) request, NULL); - GDK_THREADS_ENTER (); - - g_object_unref (cups_backend); - return TRUE; } @@ -1274,6 +1278,8 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend, ipp_t *response; GtkPrinter *printer; + GDK_THREADS_ENTER (); + GTK_NOTE (PRINTING, g_print ("CUPS Backend: %s\n", G_STRFUNC)); @@ -1294,7 +1300,7 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend, } g_signal_emit_by_name (printer, "details-acquired", success); - return; + goto done; } response = gtk_cups_result_get_response (result); @@ -1305,6 +1311,9 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend, gtk_printer_set_has_details (printer, TRUE); g_signal_emit_by_name (printer, "details-acquired", TRUE); + +done: + GDK_THREADS_LEAVE (); } static void diff --git a/modules/printbackends/file/gtkprintbackendfile.c b/modules/printbackends/file/gtkprintbackendfile.c index 6356c8d4d9..7dae376cb3 100644 --- a/modules/printbackends/file/gtkprintbackendfile.c +++ b/modules/printbackends/file/gtkprintbackendfile.c @@ -326,6 +326,8 @@ file_print_cb (GtkPrintBackendFile *print_backend, { _PrintStreamData *ps = (_PrintStreamData *) user_data; + GDK_THREADS_ENTER (); + if (ps->target_io != NULL) g_io_channel_unref (ps->target_io); @@ -342,6 +344,8 @@ file_print_cb (GtkPrintBackendFile *print_backend, g_object_unref (ps->job); g_free (ps); + + GDK_THREADS_LEAVE (); } static gboolean -- 2.30.2